package com.lailai.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
import java.util.List;

/**
 * 版本实体类
 * 对应数据库表: versions
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("versions")
public class Version {
    /**
     * 版本ID
     */
    @TableId(value = "version_id", type = IdType.AUTO)
    private Long id;

    /**
     * 版本号（唯一）
     */
    @TableField("version_number")
    @NotBlank(message = "版本号不能为空")
    private String versionNumber;

    /**
     * 发布名称
     */
    @TableField("release_name")
    private String releaseName;

    /**
     * 发布时间
     */
    @TableField("release_date")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date releaseDate;

    /**
     * 是否为主版本
     */
    @TableField("is_major_update")
    private Boolean isMajorUpdate = false;

    /**
     * 是否公开
     */
    @TableField("is_public")
    private Boolean isPublic = true;

    /**
     * 发布说明（Markdown）
     */
    @TableField("release_notes")
    private String releaseNotes;

    /**
     * 最低系统要求
     */
    @TableField("min_requirements")
    private String minRequirements;

    /**
     * 下载地址
     */
    @TableField("download_url")
    private String downloadUrl;

    /**
     * 校验码（SHA-256）
     */
    @TableField("checksum")
    private String checksum;

    /**
     * 创建时间
     */
    @TableField("created_at")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;

    /**
     * 更新时间
     */
    @TableField("updated_at")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;

    /**
     * 版本文件列表
     */
    @TableField(exist = false)
    private List<VersionFile> files;

    /**
     * 版本特性列表
     */
    @TableField(exist = false)
    private List<VersionFeature> features;

    /**
     * 依赖项列表
     */
    @TableField(exist = false)
    private List<VersionDependency> dependencies;

    /**
     * 已知问题列表
     */
    @TableField(exist = false)
    private List<KnownIssue> knownIssues;
}
